In [1]:
## 사전 실행 코드
import polars as pl
df_boxoffice = pl.read_csv("D:/book/polars/data/movie/KOBIS_기간별박스오피스.csv", skip_rows = 4, try_parse_dates=True)
boxoffice_cols = df_boxoffice.columns
boxoffice_cols[4] = '매출액점유율'
df_boxoffice.columns = [i.replace(' ', '') for i in boxoffice_cols]
df_boxoffice = df_boxoffice.with_columns(
pl.col('매출액', '누적매출액').str.replace_all(',', '').cast(pl.Int64),
pl.col('관객수', '누적관객수', '스크린수', '상영횟수').str.replace_all(',', '').cast(pl.Int64)
)
df_boxoffice = df_boxoffice.with_columns(
pl.col('장르').str.split(','),
pl.col('배우').str.split(','),
)
df_boxoffice = (df_boxoffice.filter(
pl.col('순위').is_not_null()).
filter(~(pl.col('장르').list.contains('성인물(에로)'))).
filter(pl.col('매출액') != 0).
filter(~((pl.col('관객수') <= 1) & (pl.col('누적관객수') <= 1) &
(pl.col('스크린수') <= 1) & (pl.col('상영횟수') <= 1)))
)
8장 폴라스로 영화 데이터 생생하게 그리기¶
8.1 폴라스 시각화의 특징 알아보기¶
8.2 폴라스로 손쉽게 데이터 시각화하기¶
8.3 영화 데이터를 시각적으로 풍부하게 표현하기¶
8.3.1 히스토그램으로 살펴보는 관객 수와 개봉 경향¶
In [2]:
df_boxoffice.filter(pl.col('순위') <= 100).select('스크린수').to_series().plot.hist()
Out[2]:
In [3]:
import altair as alt
(df_boxoffice.filter(pl.col('순위') <= 100).select('관객수')
.plot.bar(x = alt.X('관객수', title = '관객수').bin(maxbins = 30), y = alt.Y('count()', title='영화편수')))
Out[3]:
In [4]:
import plotly.express as px
In [5]:
fig = px.histogram( ## plotly.express의 히스토그램 함수
## 폴라스 데이터프레임에서 순위 100위 이하 필터링하고,
## X축에 상영횟수 열을 매핑하고 bin의 수를 20개로 설정
df_boxoffice.filter(pl.col('순위') <= 100), x = '상영횟수', nbins = 20)
fig.show()
In [6]:
fig = px.histogram( ## plotly.express의 히스토그램 함수
(df_boxoffice.filter(pl.col('순위') <= 100).with_columns(pl.col('개봉일').dt.weekday().alias('개봉요일')) .sort('개봉요일')
.with_columns(pl.when(pl.col('개봉요일') == 1).then(pl.lit('월'))
.when(pl.col('개봉요일') == 2).then(pl.lit('화'))
.when(pl.col('개봉요일') == 3).then(pl.lit('수'))
.when(pl.col('개봉요일') == 4).then(pl.lit('목'))
.when(pl.col('개봉요일') == 5).then(pl.lit('금'))
.when(pl.col('개봉요일') == 6).then(pl.lit('토'))
.otherwise(pl.lit('일')).alias('개봉요일'))),
x = "개봉요일", nbins = 7, text_auto = True)
fig.show()
In [7]:
fig = px.histogram( ## plotly.express의 히스토그램 함수
(df_boxoffice.filter(pl.col('개봉일').dt.year() == 2024, pl.col('순위') <= 100)
.with_columns(pl.col('개봉일').dt.month().alias('개봉월'))), ## 순위 100위 이하 필터링
## X축에 상영횟수 열을 매핑하고 bin의 수를 20개로 설정
x = "개봉월", nbins = 12, color = '대표국적', text_auto = True)
fig.show()